<?php

namespace Agp\CoreBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use APY\DataGridBundle\Grid\Mapping as GRID;
use Doctrine\Common\Collections\ArrayCollection;
use Agp\CoreBundle\Entity\ListaPreco;

/**
 * Agp\CoreBundle\Entity\Mensagem
 *
 * @ORM\Table(name="mensagem")
 * @ORM\Entity(repositoryClass="Agp\CoreBundle\Repository\MensagemRepository")
 * 
 * @GRID\Source(columns="codMensagem, dtCriado, empresa.razaoSocial, celular, mensagem, situacao, novo")
 * @ORM\HasLifecycleCallbacks
 */
class Mensagem
{
    /**
     * @var integer $codMensagem
     *
     * @ORM\Column(name="cod_mensagem", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     * 
     * @GRID\Column(title="Código", visible=false, type="text", size="5", primary=true)
     */
    protected $codMensagem;
    
    /**
     * @var $empresa
     *
     * @ORM\ManyToOne(targetEntity="Empresa", fetch="LAZY")
     * @ORM\JoinColumn(name="cod_empresa", referencedColumnName="cod_empresa")
     * 
     * @GRID\Column(field="empresa.razaoSocial", title="Mensagem", type="text")
     */
    protected $empresa;
    
    /**
     * @var $mensagemPai
     *
     * @ORM\ManyToOne(targetEntity="Mensagem", fetch="LAZY", cascade={"all"})
     * @ORM\JoinColumn(name="cod_mensagem_pai", referencedColumnName="cod_mensagem")
     */
    protected $mensagemPai;
    
    /**
     * @var string $mensagem
     *
     * @ORM\Column(name="mensagem", type="string", length=150, nullable=false)
     * @Assert\NotBlank()
     * 
     * @Assert\Length(
     *      max = "150"
     * )
     * 
     * @GRID\Column(title="Mensagem", type="text", size=300)
     */
    protected $mensagem;
    
    /**
     * @var string $celular
     *
     * @ORM\Column(name="celular", type="string", length=42, nullable=false)
     * @Assert\NotBlank()
     * 
     * @GRID\Column(title="Celular", type="text")
     */
    protected $celular;
    
    /**
     * Data para agendamento da mensagem
     * 
     * @ORM\Column(name="dt_agendamento", type="datetime", nullable=true)
     * 
     * @GRID\Column(title="Data", type="datetime", align="center")
     * @var datetime
     */
    protected $dtAgendamento;
    
    /**
     * @var string $status
     *
     * @ORM\Column(name="status", type="string", length=42, nullable=true)
     * 
     */
    protected $status;
    
    /**
     * @var string $shortcode
     *
     * @ORM\Column(name="shortcode", type="string", length=42, nullable=true)
     * 
     */
    protected $shortcode;
    
    /**
     * Data de criação da mensagem
     * 
     * @ORM\Column(name="dt_criado", type="datetime", nullable=true)
     * 
     * @GRID\Column(title="Data", type="datetime", align="center")
     * @var datetime
     */
    protected $dtCriado;
    
    const TP_COBRANCA = 'cobranca';
    const TP_COMUM = 'comum';
    /**
     * @var string $tipo
     *
     * @ORM\Column(name="tipo", type="string", length=42)
     * 
     */
    protected $tipo;
    
    const ES_EMPRESA = 'empresa';
    const ES_CLIENTE = 'cliente';
    const ES_AGENTE = 'agente';
    /**
     * @var string $tipo
     *
     * @ORM\Column(name="especie", type="string", length=42)
     * 
     */
    protected $especie;
    
    /**
     * @var string $novo
     *
     * @ORM\Column(name="novo", type="boolean")
     * 
     * @GRID\Column(title="Novo", type="boolean", align="center", visible=false)
     */
    protected $novo;
    
    /**
     * Data de atualizacao da mensagem
     * 
     * @ORM\Column(name="dt_update", type="datetime", nullable=true)
     * 
     * @var datetime
     */
    protected $dtUpdate;
    
    /**
     * @ORM\Column(name="situacao", type="string", length=45 , nullable=true)
     * 
     * @var string
     * 
     * @GRID\Column(title="Situação", type="text")
     */
    protected $situacao;

    /**
     * @ORM\PreUpdate
     */
    public function onUpdate(){
        $this->dtUpdate = new \DateTime;
    }

    public function __construct() {
        $this->dtCriado = new \DateTime;
        $this->tipo = self::TP_COMUM;
        $this->especie = self::ES_EMPRESA;
        $this->novo = false;
        $this->dtUpdate = new \DateTime;
    }

    public function getCodMensagem() {
        return $this->codMensagem;
    }
    
    public function getCodMensagemForSms(){
        return $this->mensagemPai == null ? $this->codMensagem : $this->mensagemPai->getCodMensagem();
    }

    public function getMensagemPai() {
        return $this->mensagemPai;
    }

    public function getMensagem() {
        return $this->mensagem;
    }

    public function getCelular() {
        return $this->celular;
    }

    public function getDtAgendamento() {
        return $this->dtAgendamento;
    }

    public function getMensagemResposta() {
        return $this->mensagemResposta;
    }

    public function setCodMensagem($codMensagem) {
        $this->codMensagem = $codMensagem;
    }

    public function setMensagemPai($mensagemPai) {
        $this->mensagemPai = $mensagemPai;
    }

    public function setMensagem($mensagem) {
        $this->mensagem = $mensagem;
    }

    public function setCelular($celular) {
        $this->celular = $celular;
    }

    public function setDtAgendamento($dtAgendamento) {
        $this->dtAgendamento = $dtAgendamento;
    }

    public function setMensagemResposta($mensagemResposta) {
        $this->mensagemResposta = $mensagemResposta;
    }
    
    public function getStatus() {
        return $this->status;
    }

    public function setStatus($status) {
        $this->status = $status;
    }
    
    public function getEmpresa() {
        return $this->empresa;
    }

    public function setEmpresa($empresa) {
        $this->empresa = $empresa;
    }
    
    public function getShortcode() {
        return $this->shortcode;
    }

    public function setShortcode($shortcode) {
        $this->shortcode = $shortcode;
    }

    public function getDtCriado() {
        return $this->dtCriado;
    }

    public function getDtResposta() {
        return $this->dtResposta;
    }

    public function setDtCriado($dtCriado) {
        $this->dtCriado = $dtCriado;
    }

    public function setDtResposta($dtResposta) {
        $this->dtResposta = $dtResposta;
    }
    
    public function getDtMensagem(){
        return $this->dtAgendamento != null ? $this->dtAgendamento : $this->dtCriado;
    }
    
    public function getTipo() {
        return $this->tipo;
    }

    public function setTipo($tipo) {
        $this->tipo = $tipo;
    }
    
    public function getEspecie() {
        return $this->especie;
    }

    public function setEspecie($especie) {
        $this->especie = $especie;
    }
    
    public function getNovo() {
        return $this->novo;
    }

    public function setNovo($novo) {
        $this->novo = $novo;
    }

    public function getSituacao() {
        return $this->situacao;
    }

    public function setSituacao($situacao) {
        $this->situacao = $situacao;
        return $this;
    }
    
    
}
